/**
 * 测试辅助函数
 */

/**
 * 检查指定的provider是否可用
 * @param {string} provider - 服务商名称
 * @returns {boolean} 是否可用
 */
function isProviderAvailable(provider) {
    if (!global.testConfig || !global.testConfig.initialized) {
        console.warn('⚠️  测试配置未初始化，假设provider可用');
        return true;
    }

    return global.testConfig.availableProviders.includes(provider);
}

/**
 * 检查是否应该跳过指定provider的测试
 * @param {string} provider - 服务商名称
 * @returns {boolean} 是否应该跳过
 */
function shouldSkipProvider(provider) {
    return !isProviderAvailable(provider);
}

/**
 * 获取所有可用的providers
 * @returns {Array<string>} 可用的provider列表
 */
function getAvailableProviders() {
    if (!global.testConfig || !global.testConfig.initialized) {
        return [];
    }

    return [...global.testConfig.availableProviders];
}

/**
 * 获取所有不可用的providers
 * @returns {Array<string>} 不可用的provider列表
 */
function getFailedProviders() {
    if (!global.testConfig || !global.testConfig.initialized) {
        return [];
    }

    return [...global.testConfig.failedProviders];
}

/**
 * 为指定provider创建测试跳过逻辑
 * @param {string} provider - 服务商名称
 * @param {string} testName - 测试名称（用于日志）
 * @returns {boolean} 是否应该跳过测试
 */
function skipTestIfProviderUnavailable(provider, testName) {
    if (shouldSkipProvider(provider)) {
        console.log(`⏭️  跳过测试 "${testName}" - ${provider} 不可用`);
        return true; // 表示应该跳过
    }
    return false; // 表示不跳过
}

/**
 * 创建条件测试函数
 * @param {string} provider - 服务商名称
 * @param {Function} testFn - 测试函数
 * @param {string} testName - 测试名称
 */
function conditionalTest(provider, testName, testFn) {
    test(testName, async () => {
        skipTestIfProviderUnavailable(provider, testName);
        await testFn();
    });
}

/**
 * 创建条件describe块
 * @param {string} provider - 服务商名称
 * @param {string} describeName - describe名称
 * @param {Function} describeFn - describe函数
 */
function conditionalDescribe(provider, describeName, describeFn) {
    if (isProviderAvailable(provider)) {
        describe(describeName, describeFn);
    } else {
        describe.skip(describeName, () => {
            console.log(`⏭️  跳过 "${describeName}" - ${provider} 不可用`);
        });
    }
}

module.exports = {
    isProviderAvailable,
    shouldSkipProvider,
    getAvailableProviders,
    getFailedProviders,
    skipTestIfProviderUnavailable,
    conditionalTest,
    conditionalDescribe
};